package com.qnnu.studenttravelsystem.context;

import org.springframework.stereotype.Component;

/**
 * 用户上下文工具类 —— 相当于“保安给收银员的便签纸”
 *
 * 原理：
 * - 每个HTTP请求是一个独立线程
 * - ThreadLocal 能在线程内保存数据，其他线程看不到（安全！）
 * - 请求结束必须清理（避免内存泄漏）
 */
public class UserContext {

    // 便签纸：只存当前用户的ID（辅导员ID 或 学生ID）
    //ThreadLocal<Long>代表每一个线程都是一个ID 这个id是Long 类型，他们统一存在容器 ThreadLocal中
    private static final ThreadLocal<Long> CURRENT_USER_ID = new ThreadLocal<>();

    /**
     * 保安写便签：把用户ID记下来
     */
    public static void setCurrentUserId(Long userId) {
        CURRENT_USER_ID.set(userId);
    }

    /**
     * 收银员看便签：获取当前用户ID
     */
    public static Long getCurrentUserId() {
        return CURRENT_USER_ID.get();
    }

    /**
     * 服务结束，撕掉便签（重要！防止内存泄漏）
     */
    public static void clear() {
        CURRENT_USER_ID.remove();
    }
}
